package m3;

import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.exception.RemotingException;

import java.util.List;

public class Producer {
    static String[] msgs ={
            "15103111039,创建",
            "15103111065,创建",
            "15103111039,付款",
            "15103117235,创建",
            "15103111065,付款",
            "15103117235,付款",
            "15103111065,完成",
            "15103111039,推送",
            "15103117235,完成",
            "15103111039,完成"
    };
    public static void main(String[] args) throws MQClientException, RemotingException, InterruptedException, MQBrokerException {
        //创建生产者
        DefaultMQProducer p = new DefaultMQProducer("producer-group2");
        //连接name server服务器
        p.setNamesrvAddr("192.168.64.141:9876");

        //启动
        p.start();

        //遍历发送消息
        //发送消息时，用一个 "队列选择器" 来选择队列
        for(String s : msgs){
            String[] a = s.split(",");
            Long orderId = Long.valueOf(a[0]);
            Message msg = new Message("Topic2", "TagA", s.getBytes());
            //p.send(msg,消息选择器,用来选择队列的业务数据会被传递到消息选择器中用来选择队列);
            SendResult r= p.send(msg, new MessageQueueSelector() {
                @Override
                public MessageQueue select(List<MessageQueue> list, Message message, Object o) {
                    //list集合中是Topic2中所有的队列
                    Long orderId=(Long) o;
                    int index = (int) (orderId % list.size());
                    return list.get(index);
                }
            },orderId);

            System.out.println(orderId+"--->"+r);
        }
    }
}
